protoc to typescript
#ProtocolBuffers
NPM  ワークフロー
.d.ts が生成される
実装部分は commonjsの部分を使うっぽい
https://github.com/improbable-eng/ts-protoc-gen
install
code: .sh
npm i ts-protoc-gen
Exec
code: .sh
# Path to this plugin
PROTOC_GEN_TS_PATH="./node_modules/.bin/protoc-gen-ts"
# Directory to write generated code to (.js and .d.ts files)
OUT_DIR="./generated"
protoc \
--plugin="protoc-gen-ts=${PROTOC_GEN_TS_PATH}" \
--js_out="import_style=commonjs,binary:${OUT_DIR}" \
--ts_out="${OUT_DIR}" \
employees.proto
protocコマンドの、--plugin として使う
--js_outは設定しなくても動いてた。
.d.tsだけが出力されて、実装はないのでそのままだと class としては動作しないと思われる。
(多分 commonjs 用)
Code
code: .ts
import { Employee, Employees } from "../generated/employees_pb";
const person: Employee.AsObject = {
id: 1000,
name: "Max",
salary: 2000,
};
// Object type として使うと、メソッドが使えない
// シリアライズして通信とかに使う場合は、オブジェクトとして使う(writer としても振る舞う)
const person2 = new Employee();
person2.setId(1001);
person2.setName("Max");
person2.setSalary(1000);
person2.serializeBinary();
<Message>.AsObjectタイプとかもついてくるので、
desiriarize  したあとのワークフローで型安全に使いたいとか、ドキュメントとして型を残したいなら
こっちのほうが良さげ(ただし commonjs なので deno で使えないかも)
Deno
https://github.com/marcushultman/deno-google-protobuf
Deno で使える
ES6 モジュールにしてくれる
ブラウザでも使えるかも
どっちみち、protocで commonjs,binaryにして出力したものを経由するのは変わらない